2023/12/235364字符
typeof
typeof 返回的八个值:
number
,string
,boolean
,object
,undefined
,function
,bigInt
(ES6+),symbol
(ES6+) ECMA 6.1
var num = 123; //--> number
num = "123"; //--> string
num = true; //--> boolean
num = []; //--> object
num = null; //--> object
num = undefined; //--> undefined
num = function(){} //--> function
console.log(typeof(num));
console.log(typeof num); // 另一种写法
string ToNumber = val => Number(val) ECMA 7.1.4.1
number ToString = val => val.toString() ECMA 7.1.17
显示类型转换
类型转换并不是 ECMAScript 语言的一部分;这里定义它们只是为了帮助规范 ECMAScript 语言的语义。其他更专门的抽象操作在整个规范中定义。ESMA 7.0.0
BigInt 类型没有隐式类型转换
Number(mix) 转化为数字
var num = Number("123"); //--> number:123
num = Number(true); //--> numeber:1
num = Number(false); //--> number:0
num = Number(null); //--> number:0
num = Number(-123); //--> number:-123
num = Number(undefined); //--> number:NaN
num = Number(a); //--> number:NaN
num = Number(abc123); //--> number:NaN
num = Number(NaN); //--> number:NaN
parseInt(string, radix) 转化为整形
radix 取值范围(2-36)
var num = parseInt("123"); //--> number:123
num = parseInt(false); //--> number:NaN
num = parseInt(10, 16); //--> number:16 以十六进制为机理转化为十进制
num = parseInt("b", 16); //--> number:11
num = parseInt(3, 2); //--> NaN (二进制里没有 3)
num = parseInt("123abc"); //--> 123 转化到非数字类截止
num = parseInt(123.9); //--> number:123
parseFloat(string) 转化为浮点类型
var num = parseFloat(123.3); //--> number:123.3
num = parseFloat("123.3abc"); //--> number:123.3 转化到非数字类截止( . 除外)
toString(radix)
var num = 10;
num.toString(); //--> string:10 undefined 和 null 会报错
num.toString(8); //--> string:12 以八进制目标进制进行转化
String(mix) 转化为字符串
var num = String(undefined); //--> string:undefined 写任何东西都会转化为字符串
Boolean() 转化为布尔值
var num = Boolean("");
console.log(topeof(num) + ":" + num); //--> boolean:false
进制转换
// 2 --> 10 --> 16
// perseInt toString
var num = 10000;
var text = parseInt(num, 2);
console.log(text.toSstring(16));
隐式类型转换
isNaN () 转化过程:先将值隐式的放入 Number 进行判断,如果是返回 false
var num = isNaN(NaN); //--> boolean:true Number(NaN) --> NaN --> true
num = isNaN("NaN"); //--> boolean:true
num = isNaN(123); //--> boolean:false Number(123) --> 123 --> false
num = isNaN("123"); //--> boolean:false
num = isNaN(abc); //--> true
num = isNaN(null); //--> boolean:false Number(null) --> 0 --> false
isNaN 原理:
function myIsNaN(num){
var ret = Number(num);
ret += "";
if(ret == "NaN"){
return true;
}else{
return false;
}
}
++ — (+/-(一元正负) 隐式调用 Number)
var num = "123";
num ++; //--> number:124
var num = + a; //--> number:NaN
+ (当 + 两侧有一侧为 string 即调用 String)
var num = "a" + 1; //--> string:a1
num = 1 + "2" + "2"; //--> string:122
num = 1 + -"1" + "2"; //--> string:02
num = +"1" + "1" + "2"; //--> string:112
num = "a" - "b" + "2"; //--> string:NaN2
num = "a" - "b" + 2; //--> string:NaN
* / %
var num = "a" * 1; //--> number:NaN Number("a") * Number(1) --> NaN * 1 --> NaN
&& || !
1 && 2 //--> number:2
< > <= >= (调用数字优先,其次 asc 码)
var num = "2" > 1; //--> boolean:true
num = "2" > "1"; //--> boolean:true
== !=
var num = "1" == 1; //--> boolean:true
num = 2 > 1 < 3; //--> boolean:true
num = 2 > 1 > 3; //--> boolean:false
num = undefined == null; //--> boolean:true 系统定义的
num = NaN == NaN; //--> boolean:false
console.log(topeof() + ":" + num);
不发生类型转换
=== !==
var num = "1" === 1; //--> false
面试题
console.log(typeof(a)); //--> 'undefined' 没有定义也不会报错
console.log(typeof(typeof(a))); //--> string
var count = (1, 2);
console.log(count); //--> 2
var f = (
function f () {
return "1";
},
function g () {
return 2;
}
)();
console.log(typeof(f)); // number
var x = 1;
if (function f () {}) { // () 会把里面的东西变成表达式
x += typeof(f); // 唯一一个未经声明也不会报错的方法
}
console.log(x); //--> 1number